import 'module-alias/register';
import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';
import { setupApp } from './setup';
import { getServerConfig } from '../ormconfig';
import Chalk from 'chalk';
import { Logger } from '@/common/log4js/log4j.util';
import { getLocalIP } from '@/common/utils/common.util';
import { FastifyAdapter, NestFastifyApplication } from '@nestjs/platform-fastify';
async function bootstrap() {
    const config = getServerConfig();
    // 使用Fastify适配器创建应用
    const app = await NestFactory.create<NestFastifyApplication>(
        AppModule,
        new FastifyAdapter({
            logger: false, // 启用Fastify日志
        }),
        {
            cors: {
                origin: true, // 允许所有来源（生产环境建议指定具体域名，如 "https://your-frontend.com"）
                methods: ['GET', 'POST', 'PUT', 'DELETE', 'PATCH', 'OPTIONS'], // 显式允许需要的方法
                // allowedHeaders: ['Content-Type', 'Authorization'], // 允许的请求头（根据实际需求添加）
                // credentials: true, // 如果需要携带 cookie 等凭证，开启此项
                // preflightContinue: false, // 不继续处理预检请求（交给 NestJS 自动处理）
                // optionsSuccessStatus: 204, // 预检请求成功的响应状态码
            },
        },
    );

    await setupApp(app);

    const port = typeof config['APP_PORT'] === 'string'
        ? parseInt(config['APP_PORT'])
        : 3000;

    //一定要最后一句
    await app.listen({ port, host: '0.0.0.0' }); // Fastify推荐的监听方式
    const localIp = getLocalIP();

    Logger.log(
        `--------------------------------------------------`,
        '\n',
        Chalk.magenta(`服务启动成功 `),
        `http://localhost:${config.APP_PORT}${config.API_PREFIX}`,
        '\n',
        `             `,
        `http://${localIp}:${config.APP_PORT}${config.API_PREFIX}`,
        '\n',
        '\n',
        Chalk.green(`swagger文档地址`),
        `http://localhost:${config.APP_PORT}/doc.html`,
        '\n',
        `               `,
        `http://${localIp}:${config.APP_PORT}/doc.html`,
        '\n',
        `--------------------------------------------------`,
    );
}

bootstrap();


// import setupCluster from "./setup-cluster";
// setupCluster(bootstrap)
    